package com.wl.service;

import com.wl.pojo.PageBean;
import com.wl.pojo.Personal.Collect;
import com.wl.pojo.Post;
import com.wl.pojo.User;

import java.io.IOException;
import java.util.List;
import java.util.Map;

public interface PostService {

    /**
     * 发布文章接口
     * 将文章数据写入数据库
     */
    void publishPost(Post post) throws IOException;

    /**
     * 修改文章接口
     * @param post 修改的信息
     */
    void updatePost(Post post) throws IOException;

    /**
     * 获取标签数据
     */
    List<Map<Integer, String>> getTags();

    /**
     * 获取首页展示的文章数据
     */
    PageBean getPosts(Integer userId, Integer categoryId, Integer isDescending, Integer PostCurrentPage, Integer PostPageSize);

    /**
     * 根据浏览量和点赞量进行降序排序查询热点数据
     */
    List<Post> getHotPosts();

    /**
     * 根据ID查询文章的详细信息
     */
    Post getPostById(Integer postId);

    /**
     * 对文章的访问量加一
     */
    void addPostPageview(Integer postId);

    /**
     * 根据文章id查询文章的作者信息
     */
    User getUserByPostId(Integer postId);

    /**
     * 查看某个用户是否关注了文章作责
     */
    Map<String, Boolean> getIsFollow(Integer userId, Integer followId);

    /**
     * 关注某个用户
     */
    void activeFollow(Integer userId, Integer followId);

    /**
     * 取消关注
     */
    void cancelFollow(Integer userId, Integer followId);

    /**
     * 判断某个用户是否对某篇文章点赞
     */
    Map<String, Boolean> getIsLike(Integer userId, Integer postId);

    /**
     * 点赞请求
     */
    void activeLike(Integer userId, Integer postId);

    /**
     * 取消点赞请求
     */
    void cancelLike(Integer userId, Integer postId);

    /**
     * 获取文章有多少点赞数量
     */
    Integer getLikeCount(Integer postId);

    /**
     * 收藏请求
     */
    void activeCollect(Integer userId, Integer postId, Integer categoryId);

    /**
     * 取消收藏接口
     */
    void cancelCollect(Integer userId, Integer postId, Integer categoryId);

    /**
     * 查看收藏数量
     */
    Integer getCollectCount(Integer postId);

    /**
     * 判断某个用户是否对某篇文章收藏
     */
    Map<String, Boolean> getIsCollect(Integer userId, Integer postId);

    /**
     * 创建收藏夹
     */
    void createCategory(Collect collect);

}
